package com.example.treehole.ui.page.login

import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Checkbox
import androidx.compose.material3.CheckboxDefaults
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import com.example.treehole.ui.component.CustomDialog
import com.example.treehole.ui.component.CustomSnackbarHost
import com.example.treehole.ui.model.SnackbarManager
import com.example.treehole.ui.theme.backCyan
import com.example.treehole.ui.theme.mediumDarkCyan
import com.example.treehole.ui.theme.sunYellow

val LocalLoginViewModel = compositionLocalOf<LoginViewModel> { error("LoginViewModel not provided") }

@Composable
fun InitialScreen() {
    var showLogin by remember { mutableStateOf(true) }
    var isChecked by remember { mutableStateOf(false) }
    var showProtocolDialog by remember { mutableStateOf(false) }
    var showPrivacyDialog by remember { mutableStateOf(false) }

    val localLoginViewModel:LoginViewModel = viewModel()

    CompositionLocalProvider(
        LocalLoginViewModel provides localLoginViewModel
    ) {
        Scaffold(
            snackbarHost = { CustomSnackbarHost(SnackbarManager.loginSnackbarHostState) }
        ) { padding ->
            Box(
                modifier = Modifier
                    .fillMaxSize()
                    .background(
                        brush = Brush.linearGradient(
                            colors = listOf(backCyan, sunYellow),
                            start = Offset.Zero,
                            end = Offset.Infinite
                        )
                    )
            ) {
                Column(
                    modifier = Modifier
                        .fillMaxSize()
                        .padding(bottom = 16.dp),
                    verticalArrangement = Arrangement.SpaceBetween
                ) {
                    Box(modifier = Modifier.weight(1f)) {
                        if (showLogin) {
                            // 登录界面
                            LoginScreen(
                                onChangeScreen = { showLogin = false },
                                isChecked
                            )
                        } else {
                            // 注册界面
                            RegisterScreen(
                                onChangeScreen = { showLogin = true },
                                isChecked
                            )
                        }
                    }
                    // 用户协议和隐私政策
                    Row(
                        modifier = Modifier
                            .fillMaxWidth()
                            .navigationBarsPadding()
                            .padding(vertical = 8.dp, horizontal = 32.dp),
                        verticalAlignment = Alignment.CenterVertically,
                        horizontalArrangement = Arrangement.SpaceEvenly
                    ) {
                        Checkbox(
                            checked = isChecked,
                            onCheckedChange = { isChecked = it },
                            modifier = Modifier.size(5.dp),
                            colors = CheckboxDefaults.colors(
                                checkedColor = mediumDarkCyan
                            )
                        )
                        Row(
                            modifier = Modifier.padding(start = 2.dp)
                        ) {
                            Text(text = "勾选代表同意")
                            Text(
                                text = "《用户协议》",
                                color = Color.Blue,
                                modifier = Modifier.clickable { showProtocolDialog = true }
                            )
                            Text(text = "和")
                            Text(
                                text = "《隐私政策》",
                                color = Color.Blue,
                                modifier = Modifier.clickable { showPrivacyDialog = true }
                            )
                        }
                    }
                }
            }
        }
    }

    // 用户协议框
    if (showProtocolDialog) {
        CustomDialog(
            title = "用户协议",
            text = "一、协议的接受与更新\n" +
                    "接受条款\n" +
                    "当您使用“树洞”应用（以下统称“服务”）时，即表示您同意遵守本用户协议（以下简称“协议”）的所有条款和条件。如果您不同意本协议，请勿使用我们的服务。\n" +
                    "协议更新  \n" +
                    "我们有权不时修改本协议。修改后的协议将在服务平台上发布，并在适当时通过通知等方式告知用户。您在协议更新后继续使用服务，将视为您接受了更新后的协议。\n" +
                    "\n"+
                    " 二、服务的使用\n" +
                    "服务描述  \n" +
                    "“树洞”是一个匿名社交平台，提供用户自由分享生活、表达情绪和匿名交流的空间。我们保留在任何时候修改、暂停或终止部分或全部服务的权利，且无需对您或任何第三方承担责任。\n" +
                    "\n" +
                    "使用规则  \n" +
                    "1. 合法使用：您必须按照“树洞”的设计目的和使用说明来使用服务，禁止从事任何非法、侵权或违反道德伦理的行为，包括但不限于传播恶意软件、侵犯他人知识产权、骚扰他人等行为。\n" +
                    "2. 匿名性和责任：尽管“树洞”提供匿名交流功能，您仍需为您的言行承担责任。若用户因发布违法内容导致法律纠纷，我们将依法配合执法部门进行调查。\n" +
                    "3. 账户安全：您有责任保护您的账户信息安全，不得将登录凭证分享给他人。如因您疏忽导致账户被盗用而产生的后果，您自行承担。\n" +
                    "\n"+
                    " 三、用户账户\n" +
                    "账户创建  \n" +
                    "在使用“树洞”时，您可能需要创建用户账户。您应提供准确、完整的注册信息，并保持更新。您对账户注册过程中提供的所有信息的真实性和准确性负责。\n" +
                    "账户所有权  \n" +
                    "您的账户归您所有，但我们有权根据本协议和相关法律法规对您的账户进行管理。我们保留在发现您违反本协议或法律法规时暂停或终止您账户的权利。\n" +
                    "\n" +
                    " 四、知识产权\n" +
                    "我们的知识产权  \n" +
                    "“树洞”中的所有内容，包括但不限于文字、图像和软件代码，均受知识产权法律保护，其知识产权归我们或我们的授权方所有。未经书面许可，您不得复制、传播、修改、改编或以其他方式侵犯我们的知识产权。\n" +
                    "\n" +
                    "用户内容  \n" +
                    "您在“树洞”中发布的内容（以下简称“用户内容”），授予我们全球性、免许可费、可再授权且非排他的使用权利，以便我们为您提供服务、改进服务及履行法律义务等。您应确保您拥有发布用户内容的合法权利，且用户内容不侵犯任何第三方的权益。\n" +
                    "\n" +
                    " 五、免责声明\n" +
                    "服务的“按现状”提供  \n" +
                    "“树洞”在“按现状”和“可获得”的基础上提供，不作任何明示或默示的保证，包括但不限于适用性、准确性、完整性、安全性和及时性。我们不保证服务完全满足您的需求，或服务不会中断或出错。\n" +
                    "\n" +
                    "第三方责任  \n" +
                    "“树洞”可能包含指向第三方网站或服务的链接。我们对第三方网站或服务的内容、隐私政策或安全性不承担任何责任。您在使用第三方网站或服务时应自行承担风险，并遵守其使用条款。\n" +
                    "\n" +
                    " 六、赔偿责任\n" +
                    "您同意赔偿因您违反本协议或使用“树洞”服务而引起的任何索赔、损失、损害和费用（包括律师费、诉讼费等），包括但不限于侵权行为、违反法律法规或侵犯第三方权益导致的赔偿责任。\n" +
                    "\n" +
                    " 七、协议的终止\n" +
                    "我们的终止权利  \n" +
                    "我们有权在发现您违反本协议或法律法规时立即暂停或终止您对“树洞”的使用，且无需事先通知您。此外，我们也有权因业务调整等原因终止部分或全部服务。\n" +
                    "用户的终止权利  \n" +
                    "您可以随时停止使用“树洞”服务。您停止使用后，本协议中关于知识产权、赔偿责任、免责声明等条款仍然有效。\n" +
                    "\n"+
                    " 八、法律适用和争议解决\n" +
                    "法律适用  \n" +
                    "本协议受适用地法律的管辖。\n" +
                    "\n" +
                    "争议解决  \n" +
                    "因本协议或服务使用而产生的争议，应首先通过友好协商解决；若协商不成，双方同意提交至指定的仲裁机构或法院进行裁决。\n",
            onDismiss = { showProtocolDialog = false }
        )
    }

    // 隐私政策框
    if (showPrivacyDialog) {
        CustomDialog(
            title = "隐私政策",
            text = "一、我们如何收集信息\n" +
                    "信息收集的类型\n" +
                    "个人信息：当您注册或使用“树洞”时，我们可能收集您的个人信息，如电子邮件地址等，以便提供服务、改进体验和进行必要沟通。\n" +
                    "使用信息：我们会收集您使用“树洞”时的设备信息（如设备型号、操作系统版本）和浏览记录等，以分析用户行为、改进服务并优化用户体验。\n" +
                    "\n" +
                    "信息收集的方式  \n" +
                    "您在注册、登录或填写在线表格时主动提供的信息。\n" +
                    "通过 cookies 等技术自动收集的信息。\n" +
                    "\n" +
                    " 二、我们如何使用信息\n" +
                    "服务提供：我们使用收集的信息来提供、维护和改进服务。\n" +
                    "改进服务：通过分析用户数据，我们可以优化用户界面、提高服务性能。\n" +
                    "沟通与营销：我们可能使用您的信息向您发送服务更新或促销活动信息，您可以选择退出营销通信。\n" +
                    "\n" +
                    " 三、我们如何共享信息\n" +
                    "第三方服务提供商：为提供服务，我们可能将信息共享给支付处理机构、数据分析公司等。第三方服务提供商仅在提供服务的必要范围内使用信息，且受严格保密协议约束。\n" +
                    "法律要求和保护权益：我们可能在法律法规要求下或为保护用户和平台的合法权益向政府部门或执法机构披露信息。\n" +
                    "\n" +
                    " 四、信息的安全保护\n" +
                    "安全措施  \n" +
                    "我们采取加密、访问控制、数据备份等合理的安全措施保护您的信息。但由于互联网的复杂性，无法保证信息的绝对安全。您也应保护账户信息，如不向他人泄露密码等。\n" +
                    "\n" +
                    " 五、您的权利\n" +
                    "访问和更正信息：您有权访问我们收集的您的个人信息，并在信息不准确时要求更正。\n" +
                    "删除信息：在符合法律法规的前提下，您可以要求我们删除您的个人信息。\n" +
                    "选择退出：您可以选择退出某些信息收集或营销活动。\n" +
                    "\n" +
                    " 六、隐私政策的更新\n" +
                    "我们有权不时更新本隐私政策。更新后的隐私政策将在服务平台上发布，并适时通过通知告知用户。您在更新后继续使用“树洞”将视为您接受更新后的隐私政策。\n",
            onDismiss = { showPrivacyDialog = false }
        )
    }
}